<?php

namespace Seguridad\Model\Dao;

use Zend\Db\Adapter\Adapter;
use Zend\Db\Sql\Sql;
use Seguridad\Model\Dao\GenericDAO;

class MenuDAO extends GenericDAO {

    protected $dbAdapter;

    /**
     * Nombre de la Tabla
     * @var type String
     */
    protected $tabla = 'menu';
    private static $menuDao;

    /**
     * Configura Adaptador de Base de Datos
     * 
     * @param \Zend\Db\Adapter\Adapter $adapter
     */
    private function __construct(Adapter $adapter) {
        $this->dbAdapter = $adapter;
    }

    /**
     * 
     * @param type $adapter
     * @return instancia de MenuDao
     * Patron singleton
     */
    public static function getInstance($adapter) {
        if (self::$menuDao == null) {
            self::$menuDao = new MenuDao($adapter);
        }
        return self::$menuDao;
    }

    public function getRegistro($id) {
        return $this->getRegistroGeneral($id, $this->tabla, $this->dbAdapter);
    }

    /**
     * Consulta que retorna los registros de la tabla menu
     * que coincida con el id del nodo dado por param
     * @param type String $idNodo: id del nodo o actividad
     * @return type resultadosBaseDeDatos
     * SQL SELECT "menu".* FROM "menu" WHERE id_nodo = '@param'
     */
    public function getMenuSegunIdNodo($idNodo) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where(array('id_nodo = ' . $idNodo));
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

    /**
     * Consulta que retorna los registros de la tabla menu
     * que coincida con el id de grupo dado por param
     * @param type String $idGrupo: id del grupo
     * @return type resultadosBaseDeDatos
     * SQL SELECT "menu".* FROM "menu" WHERE id_grupo = '@param'
     */
    public function getMenuSegunIdGrupo($idGrupo) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where(array('id_grupo = ' . $idGrupo));
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

    /**
     * Consulta que retorna los registros de la tabla menu
     * que coincida con el id de bloqueo dado por param
     * @param type String $idBloqueo: id de bloqueo nos indica si pueden o no acceder al nodo
     * @return type resultadosBaseDeDatos
     * SQL SELECT "menu".* FROM "menu" WHERE id_nodo = '@param'
     */
    public function getMenuSegunIdBloqueo($idBloqueo) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where(array('id_bloqueo = ' . $idBloqueo));
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

    /**
     * Consulta que retorna los registros de la tabla menu
     * que coincida con el id de grupo y el id de bloqueo dados por param
     * @param1 type String $idGrupo: id de grupo
     * @param2 type String $idBloqueo: id de bloqueo
     * @return type resultadosBaseDeDatos
     * SQL SELECT "menu".* FROM "menu" WHERE id_grupo = @param1 AND id_bloqueo = @param2
     */
    public function getMenuSegunIdGrupoYIdBloqueo($idGrupo, $idBloqueo) {
        $sql = new Sql($this->dbAdapter);
        $select = $sql->select();
        $select->from($this->tabla);
        $select->where(array("id_grupo = " . $idGrupo . "",
            "id_bloqueo = " . $idBloqueo));
        $selectString = $sql->getSqlStringForSqlObject($select);
        $adapter = $this->dbAdapter;
        $results = $adapter->query($selectString, $adapter::QUERY_MODE_EXECUTE);
        return $results;
    }

}
